package com.example.jianbing.juc;

/**
 * @ClassName : LamndaExpressDemo
 * @Description :
 * @Author : JB
 * @Date: 2020-08-04 00:47
 */


@FunctionalInterface
interface Foo
{
//    public  void sayHello();
    public int add(int x,int y);

    default  int div(int x,int y){
        System.out.println("方法实现！！");
        return x/y;
    }

    public static   int mv(int x,int y){
        System.out.println("静态方法实现！！");
        return x/y;
    }
}

/***
 * 2   Lambda Express
 *  2.1.  口诀 ： 拷贝小括号 ，写死右箭头，落地大括号
 *  2.2    @FunctionalInterface(函数式接口，只有一个方法，默认不加也有)
 *  2.3    default  1.8后接口方法可以部分有实现，并且可以有多个有实现的方法
 *  2.4   静态方法实现 ，可多个
 */
public class LamndaExpressDemo {
    public static void main(String[] args) {
        //匿名内部类
        /*Foo foo = new Foo() {
            @Override
            public void sayHello() {
                System.out.println("hello world!!");
            }
        };
        foo.sayHello();*/

        //Lambda   接口只有一个方法(函数式接口)   无参
/*        Foo foo = () -> { System.out.println("hello Lambda!"); };
        foo.sayHello();*/

        //有参
        Foo foo = (int x,int y) -> {
            System.out.println("come in here");
            return x+y;
        };
        System.out.println(foo.add(1,9));

        //有实现的方法
        System.out.println(foo.div(10,5));

        //静态实现的方法
        System.out.println(Foo.mv(2,3));
    }
}
